博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用C#从数据库动态生成AdminLTE菜单的一种方法
阅读量:6337 次
发布时间:2019-06-22

本文共 3765 字,大约阅读时间需要 12 分钟。

  当前的应用设计风格趋于Flat扁平化,很多基于BootStrap实现了很多UI非常漂亮的管理界面(Bootstrap admin template)。

此核心文件开源在Github:。首先看一下主界面:

查看左边导航的菜单html结构(下面代码有错误,HTML自定义属性直接用空格进行分割,而不是,号进行分割,不然jquery获取定义属性时可能会出现错误):

通过观察,可以发现其中菜单树的特点,这里注意一下,菜单顶级的标题显示在span中,另外class也不同。那边如何从数据库动态生成符合此特征的treemenu结构呢?

1 数据库字段设计

2 演示数据

5 菜单类实现:

首先树结构的菜单,自然想到用递归来构建(去掉html自定义属性的分割,号,用空格代替),代码如下:

1   public  class AdminLTEHelper 2     { 3         ///  4         /// 根据DataTable生成AdminLTE的多级菜单目录 5         /// GetTreeJsonByTable(datatable, "id", "title", "pid", "0","menulevel"); 6         ///  7         /// 数据源 8         /// ID列 9         /// Text列10         /// 关系字段(字典表中的树结构字段)11         /// 父ID值(0)12         /// 菜单显示层级列名13         public StringBuilder result = new StringBuilder();14         public StringBuilder sb = new StringBuilder();15     16         public void GetTreeJsonByTable(DataTable tabel, string idCol, string txtCol, string rela, object pId,string colmenulevel)17         {18 19             result.Append(sb.ToString());20             sb.Clear();21 22             if (tabel.Rows.Count > 0)23             {24                25                 string filer = string.Format("{0}='{1}'", rela, pId);26                 DataRow[] rows = tabel.Select(filer);27                 if (rows.Length > 0)28                 {29                     foreach (DataRow row in rows)30                     {31                         if (tabel.Select(string.Format("{0}='{1}'", rela, row[idCol])).Length > 0)32                         {33                             //第一层级,名称在多级菜单中 class为treeview34                             //colmenulevel为menulevel,为菜单的显示层级,可以在后台进行配置35                             //和树的层级可能不同36                             if (row[colmenulevel].ToString() == "1")37                             {38                                 sb.Append("
  • " + row[txtCol] + " ");39 40 }41 else42 {43 44 sb.Append("
  • " + row[txtCol] + " ");45 46 }47 sb.Append("
      ");48 GetTreeJsonByTable(tabel, idCol, txtCol, rela, row[idCol], colmenulevel);49 sb.Append("
    ");50 sb.Append("
  • ");51 result.Append(sb.ToString());52 sb.Clear();53 54 }55 else56 {57 //isleaf=true58 if (row[colmenulevel].ToString() == "1")59 {60 //顶级菜单,标题显示在span中,否则显示图标时,标题不能隐藏61 sb.Append("
  • " + row[txtCol] + "
  • ");62 63 }64 else65 {66 sb.Append("
  • " + row[txtCol] + "
  • ");67 }68 69 //sb.Append("
  • " + row[txtCol] + "
  • ");70 71 result.Append(sb.ToString());72 sb.Clear();73 }74 result.Append(sb.ToString());75 sb.Clear();76 77 }78 79 }80 81 result.Append(sb.ToString());82 sb.Clear();83 84 }85 86 }87 }
    View Code

    6 调用

    7 测试

    验证生成的菜单结构是否正确,首先看看显示的层级结构和数据库是否一致,另外查看单击上级,是否可以展开,最后注意的是,在左边菜单收缩后,只显示图标,鼠标移动到图标上后,并能正确显示子菜单:

    8 应用

    假设菜单是这样的:

    用jquery可以在单击菜单某项时,打开页面

    核心文件开源在Github:。

    转载地址:http://thxoa.baihongyu.com/

    你可能感兴趣的文章
    给定一个字符串s,返回去掉子串"mi"后的字符串。
    查看>>
    Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本
    查看>>
    Wrod中超链接的一些技巧
    查看>>
    IP_VFR-4-FRAG_TABLE_OVERFLOW【cisco设备报错】碎片***
    查看>>
    Codeforces Round #256 (Div. 2) D. Multiplication Table 【二分】
    查看>>
    ARM汇编指令格式
    查看>>
    HDU-2044-一只小蜜蜂
    查看>>
    HDU-1394-Minimum Inversion Number
    查看>>
    [转] createObjectURL方法 实现本地图片预览
    查看>>
    JavaScript—DOM编程核心.
    查看>>
    JavaScript碎片
    查看>>
    Bootstrap-下拉菜单
    查看>>
    soapUi 接口测试
    查看>>
    【c学习-12】
    查看>>
    工作中MySql的了解到的小技巧
    查看>>
    loadrunner-2-12日志解析
    查看>>
    C# Memcached缓存
    查看>>
    正则表达式
    查看>>
    mysql [ERROR] Can't create IP socket: Permission denied
    查看>>
    PBRT笔记(4)——颜色和辐射度
    查看>>